home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / clib02.arc / QSORT.C < prev    next >
Encoding:
C/C++ Source or Header  |  1985-10-18  |  1.1 KB  |  58 lines

  1. /* qsort - quick sort
  2.   qsort(n,comp,swap)
  3.  unsigned n;
  4.  int (*comp)();
  5.  int (*swap)();
  6.                   ***** see bsort for parameters
  7. */
  8. #define void int
  9.  
  10. static int(*_comp)(), (*_swap)();
  11.  
  12. void qsort(n,comp,swap)
  13. unsigned n;
  14.  
  15. int (*comp)();
  16. int (*swap)();
  17.  
  18. {
  19.     _comp =comp;
  20.         _swap=swap;
  21.     _quick(0,n-1);
  22. }
  23.  
  24. static void _quick(lb,ub)
  25.  
  26. unsigned lb,ub;
  27. {
  28.     unsigned j;
  29.     unsigned _rearr();
  30.     if(lb<ub) {
  31.         if(j=_rearr(lb,ub))
  32.         _quick(lb,j-1);
  33.         _quick(j+1,ub);
  34.     }
  35. }
  36.  
  37. static unsigned _rearr(lb,ub)
  38. unsigned lb,ub;
  39.  
  40. {
  41.     do {
  42.         while(ub > lb && (*_comp)(ub,lb) >=0)
  43.             ub--;
  44.         if(ub != lb) {
  45.             (*_swap)(ub,lb);
  46.             while(lb<ub && (*_comp)(lb,ub)<=0)
  47.             lb++;
  48.         if(lb != ub)
  49.             (*_swap)(lb,ub);
  50.         }
  51.     } while(lb != ub);
  52.     return(lb);
  53. }
  54. turn(lb);
  55. }
  56. turn(lb);
  57. }
  58.